package org.lzh.framework.updatepluginlib.util;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.util.Log;
import android.view.ContextThemeWrapper;
/**
* To safely operation dialog show and hide
* @author lzh
*/
public class SafeDialogOper {
/**
* To show a dialog be safety
* @param dialog The dialog instance to be shown
*/
public static void safeShowDialog(Dialog dialog) {
if (dialog == null || dialog.isShowing()) {
return;
}
Activity bindAct = getActivity(dialog);
if (bindAct == null || bindAct.isFinishing()) {
Log.d("Dialog shown failed:","The Dialog bind's Activity was recycled or finished!");
return;
}
dialog.show();
}
private static Activity getActivity(Dialog dialog) {
Activity bindAct = null;
Context context = dialog.getContext();
do {
if (context instanceof Activity) {
bindAct = (Activity) context;
break;
} else if (context instanceof ContextThemeWrapper) {
context = ((ContextThemeWrapper) context).getBaseContext();
} else {
break;
}
} while (true);
return bindAct;
}
/**
* to dismiss a dialog safety
* @param dialog The dialog to be hide
*/
public static void safeDismissDialog(Dialog dialog) {
if (dialog == null || !dialog.isShowing()) {
return;
}
Activity bindAct = getActivity(dialog);
if (bindAct != null && !bindAct.isFinishing()) {
dialog.dismiss();
}
}
}